//Web编程
/*
Web浏览
客户端通过浏览器联系上http web服务器，并请求URL（文件名）。
web服务器解析URL，并查找文件名，如果找到则以程序形式执行文件，并把执行产生的输出以HTML格式返回给客户端。
如果没有找到文件名，则返回一个错误信息。
客户端浏览器接收到HTML文件后，解析HTML文件，显示出来。
公共网关接口CGI是以一套标准，定义了信息如何在web服务器和客户端脚本之间传递。
进行CGI编程，需要以下几个步骤：
编写一个CGI程序
把它编译成一个可执行文件
把可执行文件放在web服务器的/var/www/cgi-bin目录中
设置合适的权限
web服务器支持CGI，并配置成可以执行CGI程序
HTTP头信息
CGI环境变量
C++CGI库
https://www.gnu.org/software/cgicc/doc/index.html
GET和POST方法
向CGI程序传递单选按钮数据
向CGI程序传递复选框数据
向CGI程序传递文本框数据
向CGI程序传递下拉框数据
在CGI程序中使用Cookies
文件上传
*/
#include <iostream>
using namespace std;
//CGI环境变量
const string ENV[24] = {
    "COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE",
    "HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING",
    "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION",
    "HTTP_HOST", "HTTP_USER_AGENT", "PATH",
    "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",
    "REQUEST_METHOD", "REQUEST_URI", "SCRIPT_FILENAME",
    "SCRIPT_NAME", "SERVER_ADDR", "SERVER_ADMIN",
    "SERVER_NAME", "SERVER_PORT", "SERVER_PROTOCOL",
    "SERVER_SIGNATURE", "SERVER_SOFTWARE"};
int main()
{

    cout << "Content-type:text/html\r\n\r\n";//CGI程序输出的第一行必须是Content-type:text/html\r\n\r\n。
/*http头信息
Content-type:text/html\r\n\r\n 是 HTTP 头信息的组成部分，它被发送到浏览器，以便更好地理解页面内容。
Expires: Date
Location: URL
Last-Modified: Date
Content-length: N
Set-Cookie:String
*/
    cout << "<html>\n";
    cout << "<head>\n";
    cout << "<title>Hello World - 第一个 CGI 程序</title>\n";
    cout << "</head>\n";
    cout << "<body>\n";
    cout << "<h2>Hello World! 这是我的第一个 CGI 程序</h2>\n";
    cout << "</body>\n";
    cout << "</html>\n";
    return 0;
}